package com.zrkizzy.seckill.utils;

import org.springframework.stereotype.Component;
import org.apache.commons.codec.digest.DigestUtils;

/**
 * MD5加密工具类
 *
 * @author zhangrongkang
 * @since 2023/3/20
 */
@Component
public class Md5Util {

    /**
     * 盐值
     */
    private static final String SALT = "1a2b3c4d";

    /**
     * 第一次加密
     *
     * @param password 密码明文
     * @return 第一次加密后的内容
     */
    public static String inputPassToFromPass(String password) {
        // 加密混淆
        String src = "" + SALT.charAt(0) + SALT.charAt(2) + password + SALT.charAt(5) + SALT.charAt(4);
        // 加密并返回
        return md5(src);
    }

    /**
     * 第二次加密
     *
     * @param formPass 第一次加密后的密文
     * @param salt 数据库中存储的盐值
     * @return 二次加密后的结果
     */
    public static String formPassToDbPass(String formPass, String salt) {
        // 加密混淆
        String src = "" + salt.charAt(0) + salt.charAt(2) + formPass + salt.charAt(5) + salt.charAt(4);
        // 加密并返回
        return md5(src);
    }

    /**
     * 将用户输入的密文进行加密
     *
     * @param inputPass 用户输入的密码
     * @param salt 随机生成的盐值
     * @return 加密后的密文
     */
    public static String inputPassToDbPass(String inputPass, String salt) {
        String formPass = inputPassToFromPass(inputPass);
        return formPassToDbPass(formPass, salt);
    }

    /**
     * MD5加密
     *
     * @param src 加密内容
     * @return 加密后的密文
     */
    public static String md5(String src) {
        return DigestUtils.md5Hex(src);
    }

    public static void main(String[] args) {
        // d3b1294a61a07da9b49b6e22b2cbd7f9
        System.out.println(inputPassToFromPass("123456"));
        // 68586326b7f2e74df8c0d858cb24647f
        System.out.println(formPassToDbPass("d3b1294a61a07da9b49b6e22b2cbd7f9", "1a2b3c4d"));
        System.out.println(inputPassToDbPass("123456", "1a2b3c4d"));
    }

}
